import { acceptHMRUpdate, defineStore } from 'pinia'
class userResp {
    timestamp: number | undefined
    errMsg: string | undefined
    data: { name: string; email: string; } | undefined
}
// @nuxt/pinia 插件做完了所有适配，直接像普通Vue项目一样使用即可
export const useUser = defineStore('user', {
    state: () => ({
        name: '',
        email: '',
        isLogged: false,
        // 上次登录时间戳
        lastTimeStamp: 0,
        // 本次登录时间戳
        thisTimeStamp: 0
    }),
    actions: {
        async postUser (path: string, password: string) {
            const { data, error } = await apiPostFetch(path, {
                name: this.name,
                email: this.email,
                password
            })
            const resp = data.value as unknown as userResp
            if (import.meta.env.DEV) {
                window.console.log('data:', data, 'error:', error, 'resp:', resp)
            }
            if (resp == null || error.value) {
                return { errMsg: error.value?.message || '服务器通讯失败' }
            }
            if (resp.errMsg || resp.data == null) {
                return { errMsg: resp.errMsg || '服务器数据为空' }
            }
            this.$patch({
                // 更新user
                name: resp.data.name,
                email: resp.data.email,
                isLogged: true,
                lastTimeStamp: Number(localStorage.getItem(`user-timestamp-${resp.data.email}`)) || 0,
                thisTimeStamp: resp.timestamp
            })
            // 登录时间需要单独保存，因为下线会清空数据(包括持久化数据)
            localStorage.setItem(`user-timestamp-${this.email}`, this.thisTimeStamp.toString())
        },
        logout () {
            this.$reset()
        }
    },
    // pinia 持久化插件配置
    persist: {
        // 这一点上，@pinia-plugin-persistedstate/nuxt 插件与普通Vue项目出现了差异
        // 必须借助插件提供的persistedState对象辅助
        storage: persistedState.localStorage
    }
})
// vite 中注册当前 Store 的 pinia 热更新
if (import.meta.hot) {
    import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot))
}
